package storage

import (
	"os"
	"soffice/config"
	"strings"
)

var globalStorage Storage

// InitStorage 初始化全局存储实例
func InitStorage() error {
	config := LoadConfigFromEnv()
	storage, err := NewStorage(config)
	if err != nil {
		return err
	}
	globalStorage = storage
	return nil
}

// GetStorage 获取全局存储实例
func GetStorage() Storage {
	if globalStorage == nil {
		// 如果未初始化，使用默认本地存储
		config := LoadConfigFromEnv()
		globalStorage, _ = NewStorage(config)
	}
	return globalStorage
}

// LoadConfigFromEnv 从环境变量加载存储配置
func LoadConfigFromEnv() Config {
	storageType := strings.ToLower(os.Getenv("STORAGE_TYPE"))
	if storageType == "" {
		storageType = "local" // 默认使用本地存储
	}

	// 获取动态API基础路径
	apiBasePath := config.GetAPIBasePath()

	cfg := Config{
		Type:          storageType,
		LocalBasePath: "static",
		LocalBaseURL:  "/" + apiBasePath + "/static",
	}

	// 如果配置了MinIO，加载MinIO配置
	if storageType == "minio" {
		cfg.MinIOEndpoint = os.Getenv("MINIO_ENDPOINT")
		cfg.MinIOPort = os.Getenv("MINIO_PORT")
		cfg.MinIOAccessKey = os.Getenv("MINIO_ACCESS_KEY")
		cfg.MinIOSecretKey = os.Getenv("MINIO_SECRET_KEY")
		cfg.MinioBucketName = os.Getenv("MINIO_BUCKET_NAME")

		// 默认不使用SSL
		useSSL := strings.ToLower(os.Getenv("MINIO_USE_SSL"))
		cfg.MinIOUseSSL = useSSL == "true" || useSSL == "1"

		// 设置默认值
		if cfg.MinIOEndpoint == "" {
			cfg.MinIOEndpoint = "10.11.2.97"
		}
		if cfg.MinIOPort == "" {
			cfg.MinIOPort = "9000"
		}
		if cfg.MinioBucketName == "" {
			cfg.MinioBucketName = "help-center"
		}
	}

	return cfg
}
